package com.hyy.springbootblog.common.utils;

import com.hyy.springbootblog.common.exception.BlogException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

@Slf4j
public class SecurityUtil {

    /*
     * 加密*/
    public static String encrypt(String password) {
        if (!StringUtils.hasLength(password)) {
            throw new BlogException("密码不能为空");
        }

        //生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");

        //盐值+password
        String securityPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        return salt + securityPassword;//前32位是盐值
    }


    /*
     * 验证*/
    public static boolean verify(String inputPassword, String sqlPassword) {
        if (!StringUtils.hasLength(inputPassword)
                || !StringUtils.hasLength(sqlPassword)) {
            log.error("用户输入密码或者数纪录库密码为空");
            return false;
        }

        if (sqlPassword.length() != 64) {//uuid和MD5计算值都是32长度
            return false;
        }

        //从数据库获取盐值
        String salt = sqlPassword.substring(0, 32);

        //计算当前用户结合盐值，带校验的密码
        String password = DigestUtils.md5DigestAsHex((salt + inputPassword).getBytes(StandardCharsets.UTF_8));

        //获取实际可通过密码
       String securityPassword = sqlPassword.substring(32);

       //判断实际可通过密码是否和带校验密码一致
        return securityPassword.equals(password);

    }


}
